package com.tedu.api.io;

import org.junit.Test;
import org.omg.CORBA.PUBLIC_MEMBER;

import java.io.File;
import java.io.IOException;

/**包位置：java.io
 * File  表示  文件或者文件夹【存在硬盘】
 * 测试：io包下创建文件demo.tet
 * 验证项目下是否存在demo.txt 文件
 * 创建File文件类
 * File file=new File("传入路径")
 * 构造器：传入路径 / \表示路径
 *               /   表示路径、文件下载【本地】----本次测试
 *               \   表示路径、文件上传【服务器】---网络   √
 *File文件/文件夹类可以做什么：【常用方法】
 * 1.查看文件或者文件夹的属性信息（名字、大小、判断文件是否存在等）
 * 2.操作文件或者文件夹（创建、删除等）
 * 3.访问一个目录的子项（访问文件夹下的文件夹操作）
 */
public class FileAPI {
    @Test
    public void testFile(){
        //项目结构：C/S架构---Maven---查路径---通过Idea查路径【准】
        //找到需要查找文件夹/文件---存储---右键---打开于---Explorer
        //src\main\java\com\tedu\api\io  char c='\\' 转义成路径：\
        //编写Java代码--任何操作平台运行---路径---封装  静态属性
        //Java白那些 \\  情况-----File.separator   静态属性可以在任何平台上转义成对应路径
        File file=new File("src"+File.separator+"mai" +
                "n"+File.separator+"java"+File.separator+"co" +
                "m"+File.separator+"tedu"+File.separator+"ap" +
                "i"+File.separator+"io"+File.separator+"demo.txt");
        //验证demo.txt文件是否存在
        boolean b=file.exists();
        System.out.println("测试demo.txt文件是否存在："+b);
    }

    /**
     * getName()获取文件或者文件夹名字【注意：不管file是否存在，只会拿名】
     * length()  返回值：long
     * 返回当前文件的大小（字节量）---汉字：3个字节量  字母、数字 ：1个字节量
     * exists()  返回值boolean
     * 判断file文件是否存在，存在true，反之
     */
    @Test
    public void testGLE(){
        File file=new File("src"+File.separator+"mai" +
                "n"+File.separator+"java"+File.separator+"co" +
                "m"+File.separator+"tedu"+File.separator+"ap" +
                "i"+File.separator+"io"+File.separator+"demo.txt");
        String str=file.getName();
        System.out.println("file文件名字是："+str);
        long length=file.length();
        System.out.println("file文件的字节量是："+str);
    }
/**操作文件或者文件夹(创建、删除)
 * createNewFile()
 * 创建新文件，创建不成功，如果不成功抛出IO流异常
 */
@Test
    public void testCreateNewFile() throws IOException {
    //需求：用程序创建一个文件夹：text.tet
    File file=new File("."+File.separator+"text.txt");
    //创建text.tet---创建当前文件夹下是否存在，存在---不创建
    //                                    不存在--创建
    if (file.exists()){//text.txt文件不存在
        //创建文件
        System.out.println("文件是不存在");
        file.createNewFile();
        System.out.println("文件创建完毕~");
    }else{
        System.out.println("文件存在");
    }
}

/**
 * 拓展：存放文件位置：  Maven项目：main 程序入口
 *                             test 程序测试
 * 查找：main下或者test下，必须从src位置开始找
 * ---------------------------
 *      、代表当前项目下
 */
@Test
    public void testPath() throws IOException {
    //FileAPI.java相对于项目名"API" 下
    File file=new File("."+File.separator+"1");
    //查看 file 路径
    System.out.println(file.getCanonicalPath());
    System.out.println("API项目路径下文件是否存在"+file.exists());

}

/**文件删除操作
 * delete()
 * 删除已经创建完毕文件
 */
@Test
    public void testDelete(){
    //创建File---找到text.txt文件
    File file=new File("."+File.separator+"text.txt");
    //删除      如果有文件  删除  没有文件 不删
    if (file.exists()){
        System.out.println("有文件");
        file.delete();
        System.out.println("文件删除成功");
    }else{
        System.out.println("文件不存在");
    }

}

/**
 * mkdir()
 * 在当前项目下创建一个【目录：文件夹】
 * mkdirs()
 * 创建多层【目录：文件夹】
 * 提醒：删除demo下所有文件夹
 */
@Test
    public void testMkdir(){
    //创建文件夹---创建在API文件夹下demo文件夹---abc文件夹---bxd文件夹
    File file=new File("."+File.separator+"demo"+"" +
            ""+File.separator+"abc"+File.separator+"bcd");
    //创建文件夹---如果没有文件夹--创建  有文件夹--不创建
    if(!file.exists()){
        System.out.println("没有文件夹");
       // file.mkdir();   只能创建一个文件夹
        file.mkdirs();  //创建多层文件夹
        System.out.println("创建成功");
    }else{
        System.out.println("已经存在");
    }
   /* if (file.exists()){
        System.out.println("有文件");
        file.delete();
        System.out.println("文件删除成功");
    }else{
        System.out.println("文件不存在");
    }*/
}

/**
 * isDirectory()  判断是否是【目录，返回true】，返回true
 * isFile()      判断是否是文件，返回true
 * listFiles()    返回值：数组File[]
 * 获取当前目录下所有的子项【包括：文件、文件夹】
 */
@Test
    public void testListFiles(){
    //需求：获取当前"API"文件夹下 所有的文件、文件夹
    File file=new File(".");
    //只获取 文件夹
    if (file.isDirectory()){
        //获取文件夹的子项
        File[] files=file.listFiles();
        //打印获取到的文件夹名字
        for(int i=0;i<files.length;i++){
            System.out.println(files[i]);
        }
    }
}

}
